package com.dn.designpatterns.singleton;

/**
 * @program: designpatterns
 * @description: 懒汉式单例
 * @author: DN
 * @create: 2021-03-28 16:26
 **/
public class LazySingleton {
    private static volatile LazySingleton singleton = null; //保证 singleton 在所有线程中同步

    private LazySingleton() {} // private 避免在外部被实例化,单例模式私有化构造器是必要条件

    /**
     * 注意：如果编写的是多线程程序，则不要删除上例代码中的关键字 volatile 和 synchronized，否则将存在线程非安全的问题。
     * 如果不删除这两个关键字就能保证线程安全，但是每次访问时都要同步，会影响性能，且消耗更多的资源，这是懒汉式单例的缺点。
     * @return
     */
    public static synchronized LazySingleton getInstance() {
        // getInstance 方法前加同步
        if (singleton == null){
            singleton = new LazySingleton();
        }
        return singleton;
    }
}
